#include<bits/stdc++.h>
#define inf 0x7fffffff
#define RG register
#define int long long
#define maxn 1000005
#define maxm 205
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
inline ll read(){
    ll x = 0, f = 1;
    char ch = getchar();
    while(ch > '9' || ch < '0') {if(ch == '-') f = -1;ch = getchar();}
    while(ch >= '0' && ch <= '9'){x = x *10 + ch -'0';ch = getchar();}
    return x * f;
}
 
int n, m, k, po[2][maxn];
int qpow(int a, int b){
	int ans = 1, base = a;
	while(b){
		if(b & 1) ans = 1ll * ans * base % mod;
		base= 1ll * base * base % mod;
		b >>= 1;
	}
	return ans;
}
int fac[maxn], inv[maxn], ans;
int C(int n, int m){return 1ll * fac[n] * inv[m] % mod *inv[n - m] % mod;}
signed main(){
	int i, j, x, l, r, mid;
	fac[0] = po[0][0] = po[1][0] = 1;
	for(i = 1;i <= maxn - 5;i++) fac[i] = 1ll * fac[i - 1] * i % mod, po[0][i] = po[0][i - 1] * 2ll % mod, po[1][i] = po[1][i - 1] * 3ll % mod;
	inv[maxn - 5] = qpow(fac[maxn - 5], mod - 2);
	for(i = maxn - 6;i >= 0;i--) inv[i] = 1ll * inv[i + 1] * (i + 1) % mod; 
	n = read(), m = read(), k = read();
	int las = 1;
	for(i = 0;i <= m + k;i++){
		ans = (ans + 1ll * C(n + i - 1, n - 1) * po[1][m + k -i] % mod * las % mod) % mod;
		if(i + 1 <= m && i + 1 <= k) las = las * 2ll % mod;
		else{
			if(i + 1 <= k) las = ((las * 2ll - C(i, m)) % mod + mod) % mod; 
			else if(i + 1 <= m) las = ((las * 2ll - C(i, i - k)) % mod + mod) % mod;
			else las = (((las * 2ll - C(i, i - k)) % mod + mod - C(i, m) ) % mod + mod ) % mod;
		}
	}
	printf("%lld\n",ans);
	return 0;
}