#include<bits/stdc++.h>
using namespace std;
const long long r=1e9+7;
int main()
{
/*
能被3整除,则数位和为3的倍数
0,1,2
*/
/*
dp[0][i]->前i个数字组成除3余0的子序列的个数
dp[1][i]->前i个数字组成除3余1的子序列的个数
dp[2][i]->前i个数字组成除3余2的子序列的个数
*/
string s;cin>>s;
vector<int> v(s.size());
for(int i=0;i<v.size();i++)
v[i]=s[i]-'0';
vector< vector<int> > dp;
dp.resize(3);
for(int i=0;i<3;i++)
dp[i].resize(v.size());
dp[0][0]=0;
dp[1][0]=0;
dp[2][0]=0;
dp[v[0]%3][0]=1;//初始化
for(int i=0;i+1<v.size();i++)
{
if(v[i+1]%3==0)
{
//if(!dp[0][i+1])
dp[0][i+1]=(dp[0][i]+dp[0][i]+1)%r;
//else
//dp[0][i+1]=1;
dp[1][i+1]=(dp[1][i]+dp[1][i])%r;
dp[2][i+1]=(dp[2][i]+dp[2][i])%r;
}else if(v[i+1]%3==1)
{
dp[0][i+1]=(dp[0][i]+dp[2][i])%r;
//if(!dp[1][i+1])
dp[1][i+1]=(dp[1][i]+dp[0][i]+1)%r;
//else
//dp[1][i+1]=1;
dp[2][i+1]=(dp[2][i]+dp[1][i])%r;
}else
{
dp[0][i+1]=(dp[0][i]+dp[1][i])%r;
dp[1][i+1]=(dp[1][i]+dp[2][i])%r;
//if(!dp[2][i+1])
dp[2][i+1]=(dp[2][i]+dp[0][i]+1)%r;
//else
//dp[2][i+1]=1;
}
}
cout<<dp[0][v.size()-1];
return 0;
}