#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const int maxn=900010;
const ll mo=1e9+7;
ll N,M,K;
ll frac[maxn],inv[maxn];
ll ans,sum;

ll powmod(ll a,ll b)
{
	ll ans=1;
	while (b)
	{
		if (b&1)	ans=(ans*a)%mo;
		a=(a*a)%mo;
		b>>=1;
	}
	return ans;
}
ll C(ll a,ll b)
{
	ll ans=frac[a];
	ans=(ans*inv[b])%mo;
	ans=(ans*inv[a-b])%mo;
	return ans;
}
int main()
{
	cin>>N>>M>>K;
	frac[0]=1;
	inv[0]=1;
	for (int i=1;i<=900000;i++)
		frac[i]=(frac[i-1]*i)%mo;
	inv[900000]=powmod(frac[900000],mo-2);
	for (int i=899999;i>=1;i--)
		inv[i]=(inv[i+1]*(i+1))%mo;
	sum=1;
	for (int q=0;q<=M+K;q++)
	{
		ans=(ans+(((sum*C(q+N-1,N-1))%mo)*powmod(3LL,M+K-q))%mo)%mo;
		sum=(sum*2LL)%mo;
		if (q==M+K)
			continue;
		if (q>=M)
			sum=(sum-C(q,M)+mo)%mo;
		if (q>=K)
			sum=(sum-C(q,K)+mo)%mo;
	}
	cout<<ans<<endl;
	return 0;
}