#include<stdio.h>
#include<algorithm>
using namespace std;
long long mod=1000000007;
int M=1050000;
long long inv[1100000];
long long fact[1100000];
long long factinv[1100000];
long long C(int a,int b){
	if(a<b)return 0;
	return fact[a]*factinv[b]%mod*factinv[a-b]%mod;
}
long long pw(long long a,long long b){
	long long ret=1;
	while(b){
		if(b%2)ret=ret*a%mod;
		b/=2;
		a=a*a%mod;
	}
	return ret;
}
int main(){
	inv[1]=fact[0]=factinv[0]=1;
	for(int i=1;i<M;i++)fact[i]=fact[i-1]*i%mod;
	for(int i=2;i<M;i++)inv[i]=(mod-(mod/i)*inv[mod%i]%mod)%mod;
	for(int i=1;i<M;i++)factinv[i]=factinv[i-1]*inv[i]%mod;
	int a,b,c;scanf("%d%d%d",&a,&b,&c);
	long long ret=0;
	int L=0;
	int R=0;
	long long cur=1;
	for(int i=a;i<=a+b+c;i++){
		long long ks=C(i-1,a-1)*pw(3,a+b+c-i)%mod;
		// b no kosuu
		int lm=0; lm=max(lm,i-a-c);
		int rm=i-a; rm=min(rm,b);
		if(i>a){
			cur=cur*2%mod;
			if(L<lm){
				cur=(cur+mod-C(i-a-1,L))%mod;
			}
			if(R>=rm){
				cur=(cur+mod-C(i-a-1,R))%mod;
			}
		}
		ret=(ret+ks*cur)%mod;
		L=lm;R=rm;
	}
	printf("%lld\n",ret);
}