#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;

const int MOD = 1e9 + 7;

int n, m, k;
int pow1[1010101], pow2[1010101];
int fac[1010101], rev[1010101], ifac[1010101];

int c(int a, int b)
{
	long long ret = fac[b];
	ret = ret * ifac[a];
	ret %= MOD;
	ret = ret * ifac[b - a];
	ret %= MOD;
	return (int)ret;
}

int main()
{
	scanf("%d%d%d", &n, &m, &k);
	pow1[0] = fac[0] = ifac[0] = rev[0] = pow2[0] = 1;
	ifac[1] = rev[1] = 1;
	for(int i = 1; i <= n + m + k; ++i)
	{
		pow1[i] = pow1[i - 1] * 3ll % MOD;
		pow2[i] = pow2[i - 1] * 2 % MOD;
		fac[i] = fac[i - 1] * 1ll * i % MOD;
		if(i >= 2)
		{
			rev[i] = MOD - 1ll * (MOD / i) * rev[MOD % i] % MOD;
			ifac[i] = 1ll * ifac[i - 1] * rev[i] % MOD;
		}
	}
	if(m > k)
		swap(m, k);
	int ans = 0;
	for(int i = 0; i <= m; ++i)
	{
		ans += 1ll * pow2[i] * c(i, i + n - 1) % MOD * pow1[m + k - i] % MOD;
		if(ans >= MOD)
			ans -= MOD;
	}
	int lst = pow2[m];
	for(int i = m + 1; i <= m + k; ++i)
	{
		lst = lst<<1;
		lst -= c(m, i - 1);
		if(lst >= MOD)
			lst -= MOD;
		if(i > k)
			lst -= c(i - k - 1, i - 1);
		while(lst < 0)
			lst += MOD;
		while(lst >= MOD)
			lst -= MOD;
		ans += 1ll * lst * c(i, i + n - 1) % MOD * pow1[m + k - i] % MOD;
		if(ans >= MOD)
			ans -= MOD;
	}
	printf("%d\n", ans);
	
	return 0;
}