#include <bits/stdc++.h>
#define R register
typedef long long ll;
inline int read(){
	R int x; R bool f; R char c;
	for (f = 0; (c = getchar()) < '0' || c > '9'; f = c == '-');
	for (x = c ^ '0'; (c = getchar()) >= '0' && c <= '9'; x = (x << 1) + (x << 3) + (c ^ '0'));
	return f ? -x : x;
}
#define MN 900005
const int P = 1000000007;
int inv[MN], frac[MN], p3[MN];
inline int mul(int x, int y){return (ll)x * y % P;}
inline int plu(int x, int y){return (x += y) >= P ? x - P : x;}
inline int fpw(int x, int k){
	R int res = 1;
	for (; k; k >>= 1, x = mul(x, x)) 
		if (k & 1) res = mul(res, x);
	return res;
}
inline int C(int n, int m){if (m < 0 || m > n) return 0; return mul(frac[n], mul(inv[m], inv[n-m]));}
int n, m, k, res = 1, ans = 0;
int main(){
	n = read(), m = read(), k = read();
	p3[0] = frac[0] = 1;
	for (R int i = 1; i <= m + k; ++i) p3[i] = mul(p3[i - 1] , 3);
	for (R int i = 1; i <= n + m + k; ++i) frac[i] = mul(frac[i - 1], i);
	inv[n + m + k] = fpw(frac[n + m + k], P - 2);
	for (R int i = n + m + k; i--; ) inv[i] = mul(inv[i + 1], i + 1);
	for (R int i = n; i <= n + m + k; ++i) {
		ans = plu(ans, mul(p3[n + m + k - i], mul(C(i - 1, n - 1), res)));
		res = plu(plu(res, res), plu(plu(-C(i - n, i - n -k), P), plu(-C(i - n, m), P)));
	}
	printf("%d\n", ans); return 0;
}