#include<iostream>
#include<cstdio>
#define mod 1000000007
using namespace std;
int f[1001000],n,m,k;
long long fac[1010000],inv[1010000],mi[1010000];
int C(int a,int b){return 1ll*fac[a]*inv[b]%mod*inv[a-b]%mod;}
int main()
{
	inv[0]=inv[1]=fac[0]=mi[0]=1;
	for(int i=1;i<=900000;i++)fac[i]=fac[i-1]*i%mod;
	for(int i=2;i<=900000;i++)inv[i]=(mod-mod/i)*inv[mod%i]%mod; 
	for(int i=1;i<=900000;i++)inv[i]=inv[i-1]*inv[i]%mod;
	for(int i=1;i<=900000;i++)mi[i]=mi[i-1]*3%mod;
	scanf("%d%d%d",&n,&m,&k);
	f[0]=1;
	for(int t=1;t<=m+k;t++)
		f[t]=((f[t-1]*2-(t-k-1>=0?C(t-1,t-k-1):0)-(t-1>=m?C(t-1,m):0))%mod+mod)%mod;
	
	long long ans=0;
	for(int t=0;t<=m+k;t++)
		ans=(ans+C(t+n-1,n-1)*mi[m+k-t]%mod*f[t]%mod)%mod;
	printf("%lld\n",ans);return 0;
}
/*把三个人记为ABC 
考虑他们的出牌顺序：记为AACBACBABC.....
A表示A出了一张牌，B，C同理
显然，每个出牌顺序对应一种三个人的手牌
枚举他们一共出了几张牌，在这个出牌顺序中，A要出现正好n次，且B，C出现次数要分别<=m，<=k 
记他们出的牌数为n+t
ans=∑( C(t+n-1,n-1)  *  3^(m+k-t)  *  ∑C(t,i)(max(0,t-k)<=i<=min(t,m))  ) 
        A出现的位置  剩余的牌             i为枚举B的出现次数 

记f(t)=∑C(t,i)(max(0,t-k)<=i<=min(t,m))

因为C(t,i)=C(t-1,i)+C(t-1,i-1)
把f(t)里的所有C(t,i)用C(t-1,i)+C(t-1,i-1)带，可以得到 
f(t)=(f(t-1)-(t-k-1>=0?C(t-1,t-k-1)))
    +(f(t-1)-(t-1>=m?C(t-1,m)))
因为i的取值范围不同，所以要进行一些微调(即后面减的部分)

*/ 