#include <iostream>
#include <utility>
#define llint long long
#define mod 1000000007

using namespace std;

llint A, B, C;
llint beki2[900005], beki3[900005];
llint dp[900005];

llint fact[900005], fact_inv[900005];
llint pow(llint a, llint n)
{
	if(n == 0) return 1;
	if(n % 2){
		return ((a%mod) * (pow(a, n-1)%mod)) % mod;
	}
	else{
		return pow((a*a)%mod, n/2) % mod;
	}
}

void make_fact()
{
	llint val = 1;
	fact[0] = 1;
	for(int i = 1; i < 900005; i++){
		val *= i;
		val %= mod;
		fact[i] = val;
	}
	for(int i = 0; i < 900005; i++){
		fact_inv[i] = pow(fact[i], mod-2);
	}
}

llint comb(llint n, llint k)
{
	llint ret = 1;
	ret *= fact[n];
	ret *= fact_inv[k], ret %= mod;
	ret *= fact_inv[n-k], ret %= mod;
	return ret;
}

int main(void)
{
	cin >> A >> B >> C;
	if(B > C) swap(B, C);
	
	make_fact();
	
	llint mul = 1;
	for(int i = 0; i < 900005; i++){
		beki2[i] = mul;
		mul *= 2, mul %= mod;
	}
	mul = 1;
	for(int i = 0; i < 900005; i++){
		beki3[i] = mul;
		mul *= 3, mul %= mod;
	}
	
	for(int i = 0; i <= B; i++) dp[i] = beki2[i];
	for(int i = B; i < C; i++){
		dp[i+1] = (2 * dp[i] + mod - comb(i, B)) % mod;
		dp[i+1] %= mod;
	}
	for(int i = C; i < B+C; i++){
		dp[i+1] = (2 * dp[i] + 2 * mod - (comb(i, i-C) + comb(i, B))) % mod;
		dp[i+1] %= mod;
	}
	
	llint ans = 0, tmp;
	for(int i = 0; i <= B+C; i++){
		tmp = comb(A+i-1, i) * dp[i] % mod * beki3[B+C-i] % mod;
		ans += tmp, ans %= mod;
	}
	cout << ans << endl;
	
	return 0;
}