#include<iostream>
#include<string>
#include<cstring>
using namespace std;
long dp[210000][5],i,j,L,MOD=(long)1e9+7;
string S;
void mod_add(long &a,long b){
  a+=b;
  if(a>=MOD)a-=MOD;
}
int main(){
  cin>>S;
  dp[0][0]=1;
  L=S.size();
  for(i=0;i<L;++i){
    for(j=0;j<5;++j){
      if(S[i]!='?')mod_add(dp[i+1][j],dp[i][j]);
      else mod_add(dp[i+1][j],dp[i][j]*3%MOD);
    }
    if(S[i]=='A'||S[i]=='?')mod_add(dp[i+1][1],dp[i][0]);
    if(S[i]=='B'||S[i]=='?')mod_add(dp[i+1][2],dp[i][1]);
    if(S[i]=='C'||S[i]=='?')mod_add(dp[i+1][3],dp[i][2]);
  }
  cout<<dp[L][3]<<endl;
}
