import sys

sys.setrecursionlimit(10**7)
def I(): return int(sys.stdin.readline().rstrip())
def MI(): return map(int,sys.stdin.readline().rstrip().split())
def LI(): return list(map(int,sys.stdin.readline().rstrip().split()))  #空白あり
def LI2(): return list(map(int,sys.stdin.readline().rstrip()))  #空白なし
def S(): return sys.stdin.readline().rstrip()
def LS(): return list(sys.stdin.readline().rstrip().split())  #空白あり
def LS2(): return list(sys.stdin.readline().rstrip())  #空白なし


L = LI2()
N = len(L)
mod = 10**9+7

ans = 0
a = 1

for i in range(N):
    if L[i] == 1:
        ans += pow(3,N-i-1,mod)*a
        ans %= mod
        a *= 2
        a %= mod

print((ans+a) % mod) import sys sys sys.setrecursionlimit(10**7) sys.setrecursionlimit sys setrecursionlimit 10**7 10 7 def I(): return int(sys.stdin.readline().rstrip()) I def MI(): return map(int,sys.stdin.readline().rstrip().split()) MI def LI(): return list(map(int,sys.stdin.readline().rstrip().split()))  #空白あり LI def LI2(): return list(map(int,sys.stdin.readline().rstrip()))  #空白なし LI2 def S(): return sys.stdin.readline().rstrip() S def LS(): return list(sys.stdin.readline().rstrip().split())  #空白あり LS def LS2(): return list(sys.stdin.readline().rstrip())  #空白なし LS2 L = LI2() L LI2() LI2 N = len(L) N len(L) len L mod = 10**9+7 mod 10**9+7 10**9 10 9 7 ans = 0 ans 0 a = 1 a 1 for i in range(N):
    if L[i] == 1:
        ans += pow(3,N-i-1,mod)*a
        ans %= mod
        a *= 2
        a %= mod i range(N) range N if L[i] == 1:
        ans += pow(3,N-i-1,mod)*a
        ans %= mod
        a *= 2
        a %= mod L[i] == 1 L[i] L i 1 ans += pow(3,N-i-1,mod)*a ans pow(3,N-i-1,mod)*a pow(3,N-i-1,mod) pow 3 N-i-1 N-i N i 1 mod a ans %= mod ans mod a *= 2 a 2 a %= mod a mod print((ans+a) % mod) print (ans+a) % mod ans+a ans a mod ans = 0 0 ans def LS2(): return list(sys.stdin.readline().rstrip())  #空白なし def LS2(): return list(sys.stdin.readline().rstrip())  #空白なし LS2 a %= mod mod a def LI(): return list(map(int,sys.stdin.readline().rstrip().split()))  #空白あり def LI(): return list(map(int,sys.stdin.readline().rstrip().split()))  #空白あり LI def S(): return sys.stdin.readline().rstrip() def S(): return sys.stdin.readline().rstrip() S N = len(L) len(L) N def LI2(): return list(map(int,sys.stdin.readline().rstrip()))  #空白なし def LI2(): return list(map(int,sys.stdin.readline().rstrip()))  #空白なし LI2 def LS(): return list(sys.stdin.readline().rstrip().split())  #空白あり def LS(): return list(sys.stdin.readline().rstrip().split())  #空白あり LS L = LI2() LI2() L a *= 2 2 a def I(): return int(sys.stdin.readline().rstrip()) def I(): return int(sys.stdin.readline().rstrip()) I a = 1 1 a mod = 10**9+7 10**9+7 mod ans %= mod mod ans ans += pow(3,N-i-1,mod)*a pow(3,N-i-1,mod)*a ans def MI(): return map(int,sys.stdin.readline().rstrip().split()) def MI(): return map(int,sys.stdin.readline().rstrip().split()) MI
import sys

sys.setrecursionlimit(10**7)
def I(): return int(sys.stdin.readline().rstrip())
def MI(): return map(int,sys.stdin.readline().rstrip().split())
def LI(): return list(map(int,sys.stdin.readline().rstrip().split()))  #空白あり
def LI2(): return list(map(int,sys.stdin.readline().rstrip()))  #空白なし
def S(): return sys.stdin.readline().rstrip()
def LS(): return list(sys.stdin.readline().rstrip().split())  #空白あり
def LS2(): return list(sys.stdin.readline().rstrip())  #空白なし


L = LI2()
N = len(L)
mod = 10**9+7

ans = 0
a = 1

for i in range(N):
    if L[i] == 1:
        ans += pow(3,N-i-1,mod)*a
        ans %= mod
        a *= 2
        a %= mod

print((ans+a) % mod)
