#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
inline int read()
{
	int res, ok = 1;
	char ch;
	for (ch = getchar(); ch < '0' || ch > '9'; ch = getchar())
	if (ch == '-')
	ok = -1;
	res = ch - '0';
	for (ch = getchar(); ch >= '0' && ch <= '9'; ch = getchar())
	res = res * 10 + ch - '0';
	return res * ok;
}
long long mod = 1e9 + 7;
int n, m, k;
long long qp2[1000005], qp3[1000005], f[1000005], rev[1000005], fac[1000005], ans, last;
inline long long C (int x, int y)
{
	long long num = f[y];
	num = num * fac[x] % mod;
	num = num * fac[y - x] % mod;
	return num;
}
int main()
{
	n = read();
	m = read();
	k = read();
	qp2[0] = 1;
	qp3[0] = 1;
	f[0] = 1;
	rev[0] = rev[1] = 1;
	fac[0] = fac[1] = 1;
	for (int i = 1; i <= n + m + k; i++)
	{
		qp2[i] = qp2[i - 1] * 2 % mod;
		qp3[i] = qp3[i - 1] * 3 % mod;
		f[i] = f[i - 1] * i % mod;
		if (i >= 2)
		{
			rev[i] = mod - (mod / i) * rev[mod % i] % mod;
			fac[i] = fac[i - 1] * rev[i] % mod;
		}
	}
	if (m > k)
	swap (m, k);
	for (int i = 0; i <= m; i++)
	ans = (ans + qp2[i] * C (i, i + n - 1) % mod * qp3[m + k - i] % mod) % mod;
	last = qp2[m];
	for (int i = m + 1; i <= m + k; i++)
	{
		last <<= 1;
		last -= C (m, i - 1);
		last %= mod;
		if (i > k)
		last -= C (i - k - 1, i - 1);
		last %= mod;
		if (last < 0)
		last += mod;
		if (last >= mod)
		last -= mod;
		ans = (ans + last * C (i, i + n - 1) % mod * qp3[m + k - i] % mod) % mod;
	}
	printf ("%lld\n", ans);
	return 0;
}