# include "iostream"
# include "cstdio"
using namespace std;
const int maxm=3e5+10;
const int Mod=1e9+7;
int N,M,K,Max;
long long Fac[maxm],Inv1[maxm],Inv2[maxm],P[maxm];
long long C(int x,int y){
return Fac[x]*Inv2[y]%Mod*Inv2[x-y]%Mod;
}
int main(){
register int i,j;
register long long Ans=0;
scanf("%d%d%d",&N,&M,&K);
Max=N+M+K;
Fac[0]=Fac[1]=Inv1[0]=Inv1[1]=Inv2[0]=Inv2[1]=1;
P[0]=1,P[1]=3;
for(i=2;i<=Max;i++){
Fac[i]=Fac[i-1]*i%Mod;
Inv1[i]=(Mod-Mod/i)*Inv1[Mod%i]%Mod;
Inv2[i]=Inv2[i-1]*Inv1[i]%Mod;
P[i]=P[i-1]*3%Mod;
}
if(M<K) swap(M,K);
for(i=0,j=1;i<=M+K;i++){
Ans=(Ans+C(N-1+i,N-1)*P[M+K-i]%Mod*j)%Mod;
if(i<K) j=j*2%Mod;
else if(i>=M) j=((j<<1)-C(i,K)-C(i,i-M)+(Mod<<1))%Mod;
else j=((j<<1)-C(i,K)+Mod)%Mod;
}
printf("%lld",Ans);
return 0;
}
./Main.cpp: In function ‘int main()’:
./Main.cpp:19:26: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%d",&N,&M,&K);
^