#include <bits/stdc++.h>
using namespace std;
const int mod=1e9+7,N=1e5+10;
string s;
long long f[N][4];
int main(){
cin>>s;
int n=s.size();
s=' '+s;
f[0][0]=1;
f[0][2]=0;
f[0][1]=0;
f[0][3]=0;
for(int i=1;i<=n;i++){
f[i][0]=f[i-1][0];
f[i][1]=f[i-1][1];
f[i][2]=f[i-1][2];
f[i][3]=f[i-1][3];
if(s[i]=='A'){
f[i][1]=(f[i-1][0]+f[i-1][1])%mod;
}else if(s[i]=='B'){
f[i][2]=(f[i-1][1]+f[i-1][2])%mod;
}else if(s[i]=='C'){
f[i][3]=(f[i-1][2]+f[i-1][3])%mod;
}else if(s[i]=='?'){
f[i][0]=(f[i-1][0]*3)%mod;
f[i][1]=(f[i-1][0]+3*f[i-1][1])%mod;
f[i][2]=(f[i-1][1]+3*f[i-1][2])%mod;
f[i][3]=(f[i-1][2]+3*f[i-1][3])%mod;
}
}
cout<<f[n][3];
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBtb2Q9MWU5KzcsTj0xZTUrMTA7CnN0cmluZyBzOwpsb25nIGxvbmcgZltOXVs0XTsKaW50IG1haW4oKXsKCWNpbj4+czsKCWludCBuPXMuc2l6ZSgpOwoJcz0nICcrczsKCWZbMF1bMF09MTsKCWZbMF1bMl09MDsKCWZbMF1bMV09MDsKCWZbMF1bM109MDsKCWZvcihpbnQgaT0xO2k8PW47aSsrKXsKCQlmW2ldWzBdPWZbaS0xXVswXTsKCQlmW2ldWzFdPWZbaS0xXVsxXTsKCQlmW2ldWzJdPWZbaS0xXVsyXTsKCQlmW2ldWzNdPWZbaS0xXVszXTsKCQlpZihzW2ldPT0nQScpewoJCQlmW2ldWzFdPShmW2ktMV1bMF0rZltpLTFdWzFdKSVtb2Q7CgkJfWVsc2UgaWYoc1tpXT09J0InKXsKCQkJZltpXVsyXT0oZltpLTFdWzFdK2ZbaS0xXVsyXSklbW9kOwoJCX1lbHNlIGlmKHNbaV09PSdDJyl7CgkJCWZbaV1bM109KGZbaS0xXVsyXStmW2ktMV1bM10pJW1vZDsKCQl9ZWxzZSBpZihzW2ldPT0nPycpewoJCQlmW2ldWzBdPShmW2ktMV1bMF0qMyklbW9kOwoJCQlmW2ldWzFdPShmW2ktMV1bMF0rMypmW2ktMV1bMV0pJW1vZDsKCQkJZltpXVsyXT0oZltpLTFdWzFdKzMqZltpLTFdWzJdKSVtb2Q7CgkJCWZbaV1bM109KGZbaS0xXVsyXSszKmZbaS0xXVszXSklbW9kOwoJCX0KCX0KCWNvdXQ8PGZbbl1bM107Cn0=