#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;
const int MAXN = 9e5 + 10 , MOD = 1e9 + 7;
int fac[MAXN] , ifac[MAXN] , f3[MAXN];
void init(){
	fac[0] = fac[1] = 1;
	for(int i = 2 ; i < MAXN ; ++ i)
		fac[i] = 1ll * fac[i - 1] * i % MOD;
	ifac[0] = ifac[1] = 1;
	for(int i = 2 ; i < MAXN ; ++ i)
		ifac[i] = MOD - 1ll * ifac[MOD % i] * (MOD / i) % MOD;
	for(int i = 2 ; i < MAXN ; ++ i)
		ifac[i] = 1ll * ifac[i - 1] * ifac[i] % MOD;
	f3[0] = 1;
	for(int i = 1 ; i < MAXN ; ++ i)
		f3[i] = 1ll * f3[i - 1] * 3 % MOD;
}

int C(int a , int b){
	if(b < 0 || b > a) return 0;
	return 1ll * fac[a] * ifac[b] % MOD * ifac[a - b] % MOD;
}
int n , m , k;
int main(){
	init();
	cin >> n >> m >> k;
	int ans = 0 , last = 1 , st = 0 , ed = 0;
	for(int i = 0 ; i <= m + k ; ++ i){
		ans = (ans + 1ll * last * f3[m + k - i] % MOD * C(n + i - 1 , n - 1)) % MOD;
		last = 2ll * last % MOD;
		last = (last + C(i , st - 1)) % MOD;
		last = (last + MOD - C(i , ed)) % MOD;
		if(i - st >= m){
			last = (last + MOD - C(i + 1 , st)) % MOD;
			st ++;
		}
		if(ed < k){
			ed ++;
			last = (last + C(i + 1 , ed)) % MOD;
		} 
		if(st > ed) break;
	}
	cout << ans << endl;
	return 0;
}