#include<cstdio>
#include<iostream>
#include<cstring>
#define RG register
#define LL long long
using namespace std;
const int N=9e5+10;
const LL mod=1e9+7;
int n,m,k;
LL fac[N]={1},inv[N]={1,1},pw[N]={1},ans,j=1;
template<typename I> inline void read(I &ot){
	I ch=getchar(), x=0, f=1;
	while(ch<'0' || ch>'9'){if(ch=='-') f=-1; ch=getchar();	}
	while(ch>='0' && ch<='9'){x=x*10+ch-'0'; ch=getchar();	}
	ot=x*f;}
template<typename I, typename... U> inline void read(I &x,U&... y){read(x); read(y...);}
template<typename I>inline void swp(I&a,I&b){a^=b; b^=a; a^=b;}
inline LL C(int nn,int mm){return fac[nn]*inv[mm]%mod*inv[nn-mm]%mod;}
int main()
{
//	freopen("Card Game for Three.in","r",stdin);
	//freopen(".out","w",stdout);
	read(n,m,k);
	if(k>m) swp(k,m);
	for(int i=2;i<=n+k+m;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
	for(int i=1;i<=n+k+m;i++) fac[i]=fac[i-1]*i%mod, (inv[i]*=inv[i-1])%=mod, pw[i]=pw[i-1]*3%mod;
	for(int i=0;i<=m+k;i++)
	{
		(ans+=C(n+i-1,n-1)*pw[m+k-i]%mod*j%mod)%=mod;
		if(i<k) (j<<=1)%=mod;
		else if(i>=m) (j+=j-C(i,k)+mod-C(i,m)+mod)%=mod;
		else (j+=j-C(i,k)+mod)%=mod;
	}
	printf("%lld\n",ans);
	//fclose(stdin); fclose(stdout);
	return 0;
}