#include <bits/stdc++.h>
#define DEBUG fprintf(stderr, "Passing [%s] line %d\n", __FUNCTION__, __LINE__)
#define File(x) freopen(x".in","r",stdin); freopen(x".out","w",stdout)
#define int long long

using namespace std;

typedef long long LL;
typedef pair <int, int> PII;
typedef pair <int, PII> PIII;

template <typename T>
inline T gi()
{
	T f = 1, x = 0; char c = getchar();
	while (c < '0' || c > '9') {if (c == '-') f = -1; c = getchar();}
	while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
	return f * x;
}

const int INF = 0x3f3f3f3f, N = 300003, M = N << 1, mod = 1000000007;

int n, m, k, ans;
int fac[N * 3], inv[N * 3], f[M];

inline int qpow(int a, int b)
{
	int res = 1;
	while (b)
	{
		if (b & 1) res = res * a % mod;
		a = a * a % mod, b >>= 1;
	}
	return res;
}

inline int C(int a, int b)
{
	if (a < b || a < 0 || b < 0) return 0;
	return fac[a] * inv[b] % mod * inv[a - b] % mod;
}

signed main()
{
	//File("");
	n = gi <int> (), m = gi <int> (), k = gi <int> ();
	fac[0] = 1;
	for (int i = 1; i <= n + m + k; i+=1) fac[i] = fac[i - 1] * i % mod;
	inv[n + m + k] = qpow(fac[n + m + k], mod - 2);
	for (int i = n + m + k - 1; i >= 0; i-=1) inv[i] = inv[i + 1] * (i + 1) % mod;
	f[0] = 1;
	for (int i = 1; i <= m + k; i+=1) f[i] = ((2 * f[i - 1] % mod - C(i - 1, i - 1 - k) + mod) % mod - C(i - 1, m) + mod) % mod;
//	for (int i = 1; i <= m + k; i+=1) cout << f[i] << endl;
	for (int i = 0; i <= m + k; i+=1)
	{
//		cout << f[i] << ' ' << qpow(3, m + k - i) << ' ' << C(n - 1 + i, n - 1) << endl;
		ans = (ans + (f[i] * qpow(3, m + k - i) % mod * C(n - 1 + i, n - 1) % mod) % mod) % mod;
	}
	printf("%lld\n", ans);
	return 0;
}
