#include <bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
inline int add(int x,int y) {return (x+y>=mod) ? (x+y-mod) : (x+y);}
inline int dec(int x,int y) {return (x-y<0) ? (x-y+mod) : (x-y);}
inline int mul(int x,int y) {return (long long)x*y%mod;}
inline int power(int a,int b,int rs=1) {for(;b;b>>=1,a=mul(a,a)) if(b&1) rs=mul(rs,a); return rs;}
inline int cinv(int a) {return power(a,mod-2);}

const int N=1e6+50;
struct combin {
	int fac[N],ifac[N];
	combin() {
		fac[0]=1;
		for(int i=1;i<N;i++) fac[i]=mul(fac[i-1],i);
		ifac[N-1]=cinv(fac[N-1]);
		for(int i=N-2;~i;i--) ifac[i]=mul(ifac[i+1],i+1);
	}
	inline int C(int a,int b) {
		if(a>=0 && b>=0 && a>=b) return mul(fac[a],mul(ifac[b],ifac[a-b]));
		else return 0;
	}
} C;

int n,m,k,pw[N],ans;
int l,r=-1,now=-1,sum;
inline void trans() {
	++now;
	if(l>r) return;
	sum=mul(sum,2);
	sum=dec(sum,C.C(now-1,r));
	sum=add(sum,C.C(now-1,l-1));
}
inline void move(int L,int R) {
	while(l<L) sum=dec(sum,C.C(now,l)), ++l;
	while(l>L) --l, sum=add(sum,C.C(now,l));
	while(r>R) sum=dec(sum,C.C(now,r)), --r;
	while(r<R) ++r, sum=add(sum,C.C(now,r));
}
int main() {
	cin>>n>>m>>k;
	pw[0]=1;
	for(int i=1;i<=n+m+k;++i) pw[i]=mul(pw[i-1],3);
	for(int len=n;len<=n+m+k;++len) {
		trans(); move(max(0,len-n-k),min(m,len-n));
		int t=mul(sum,C.C(len-1,n-1));
		t=mul(t,pw[n+m+k-len]);
		ans=add(ans,t);
	} cout<<ans<<'\n';
}