#include <iostream>
#include <cstdio>
#include <cstring>
#define MOD 1000000007
using namespace std;
const int MAXN = 1000005;
int n,m,k,fac[MAXN],inv[MAXN];
typedef long long ll;
inline int ksm(int x,int k)
{
	int ret=1;
	while(k){
		if(k&1)ret=(ll)ret*x%MOD;
		x=(ll)x*x%MOD;
		k>>=1;
	}
	return ret;
}
int ter[MAXN];
inline void init(int n)
{
	fac[0]=1;
	ter[0]=1;
	for(int i=1;i<=n;++i)ter[i]=(ll)ter[i-1]*3%MOD;
	for(int i=1;i<=n;++i)fac[i]=(ll)fac[i-1]*i%MOD;
	inv[n]=ksm(fac[n],MOD-2);
	for(int i=n-1;i>=0;--i)
		inv[i]=(ll)inv[i+1]*(i+1)%MOD;
}
inline int C(int n,int m)
{
	return n>m?0:(ll)fac[m]*inv[m-n]%MOD*inv[n]%MOD;
}
inline void add(int &x,int a)
{
	x+=a;
	if(x>=MOD)x-=MOD;
}
int main()
{
	scanf("%d%d%d",&n,&m,&k);
	init(n+m+k);
	int ans=0,now=1;
	if(m>k)swap(m,k);
	for(int i=0;i<=m+k;++i){
		add(ans,(ll)C(n-1,i+n-1)*ter[m+k-i]%MOD*now%MOD);
		if(i<m)now=(ll)now*2%MOD;
		else if(i>=m && i<k)now=((ll)now*2%MOD-C(m,i)+MOD)%MOD;
		else now=(((ll)now*2%MOD-C(i-k,i)+MOD)%MOD-C(m,i)+MOD)%MOD;
	}
	cout<<ans<<endl;
	return 0;
}
