#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;

#define fi(a,b) for(int i=a;i<b;++i)
typedef long long ll;
///////////////////

int const N = 1e6 + 41;
int const MOD = 1e9 + 7;

int n, m, k;
int f[N], invf[N];
int th[N];
int ans;

void add(int &a, int b){
	a += b;
	while(a >= MOD) a -= MOD;
	while(a < 0) a += MOD;
}

int mul(int a, int b){
	return (ll) a * b % MOD;
}

int bp(int x, int d){
	int res = 1;
	while(d){
		if(d&1) res = mul(res, x);
		d >>= 1;
		x = mul(x, x);
	}
	return res;
}

int inv(int x){
	return bp(x, MOD-2);
}

int dg[N];

int getc(int n, int k){
	if(k > n) return 0;
	int res = f[n];
	res = mul(res, invf[k]);
	res = mul(res, invf[n-k]);
	return res;
}

void init(){
	f[0] = 1;
	fi(1, N) f[i] = mul(f[i-1], i);
	fi(0, N) invf[i] = inv(f[i]);
	th[0] = 1;
	fi(1, N) th[i] = mul(th[i-1], 3);
	dg[0] = 1;
	int all = 1;
	int bad = 0;
	fi(1, m+k+1){
		all = mul(all, 2);
		bad = mul(bad, 2);
		int b0 = getc(i-1, k);
		add(bad, b0);
		int b1 = getc(i-1, m);
		add(bad, b1);
		dg[i] = all;
		add(dg[i], -bad);
	}
}

void solve(){
	int x = n + m + k;
	fi(n, x+1){
		int f = getc(i-1, n-1);
		int g = dg[i-n];
		int t = th[x-i];
		add(ans, mul(f, mul(g, t)));
	}
}

int main(){
#ifdef _DEBUG
	freopen("input.txt","r",stdin);
	freopen("output.txt","w",stdout);
#endif

	scanf("%d %d %d",&n,&m,&k);

	init();

	solve();

	printf("%d\n",ans);

	return 0;
}