#include <bits/stdc++.h>

#define lld long long
#define pii pair<int,int>
#define pll pair<lld,lld>
#define pb push_back
#define next nextt
#define Inf 1000000000
#define Linf 1000000000000000000LL
#define Mod 1000000007

using namespace std;

int N,M,K; lld ans;
lld fact[900002],inv[900002],three[900002],two[900002];

lld mul(lld x,lld y){
	if(y == 0) return 1;
	lld tmp = mul(x,y/2);
	tmp *= tmp; tmp %= Mod;
	if(y%2 == 1){
		tmp *= x;
		tmp %= Mod;
	}
	return tmp;
}
lld comb(lld x,lld y){
	return (fact[x]*inv[x-y]%Mod)*inv[y]%Mod;
}

int main(){
   // freopen("input.txt","r",stdin);
	scanf("%d %d %d",&N,&M,&K);
	fact[0] = inv[0] = three[0] = two[0] = 1;
	for(int i=1; i<=900000; i++){
		fact[i] = (fact[i-1]*i)%Mod;
		inv[i] = mul(fact[i],Mod-2);
		three[i] = (three[i-1]*3)%Mod;
		two[i] = (two[i-1]*2)%Mod;
	}
	if(M < K) swap(M,K);
	lld t1,t2;
	for(int i=0; i<=M+K; i++){
		lld tmp;
		if(i <= K) tmp = two[i];
		else if(i == M+1){
			t1 = t2 = 0;
			for(int j=0; j<=i-K-1; j++){
				t1 += comb(i,j); t1 %= Mod;
			}
			for(int j=0; j<=i-M-1; j++){
				t2 += comb(i,j); t2 %= Mod;
			}
			tmp = two[i]-(t1+t2);
		}else if(i > M){
			t1 = t1*2+comb(i-1,i-K-1); t1 %= Mod;
			t2 = t2*2+comb(i-1,i-M-1); t2 %= Mod;
			tmp = two[i]-(t1+t2);
		}else if(i == K+1){
		    t1 = 0;
            for(int j=0; j<=i-K-1; j++){
                t1 += comb(i,j);
                t1 %= Mod;
            }
            tmp = two[i]-t1;
		}else{
		    t1 = t1*2+comb(i-1,i-K-1); t1 %= Mod;
            tmp = two[i]-t1;
		}

		tmp *= comb(N-1+i,N-1); tmp %= Mod;
		tmp *= three[M+K-i]; tmp %= Mod;
		ans += tmp; ans %= Mod;
	}
	if(ans < 0) ans += Mod;
	printf("%lld\n",ans);

	return 0;
}
