#include <bits/stdc++.h>
#define ll long long 
using namespace std ;

const int mod = 1e9 + 7;
const int N = 900010;
int n, m, k;
ll fac[N], inv[N], p[N];

inline ll read() {
	ll s = 0, f = 1;
	char ch;
	for(; ch < '0' || ch > '9'; ch = getchar())	if(ch == '-')	f = -1;
	for(; ch >= '0' && ch <= '9'; ch = getchar())	s = (s << 1) + (s << 3) + ch - '0';
	return s * f;
}

inline ll quickpow(ll a, ll b) {
    ll re = 1;
    while(b) {
        if(b & 1) re *= a;
        re %= mod;
		b >>= 1;
        a *= a;
        a %= mod;
    }
    return re;
}

inline void init() {
	n = read(), m = read(), k = read();
    fac[0] = 1;
    p[0] = 1;
    for(int i = 1 ; i < N; ++i) {
        fac[i] = fac[i - 1] * i % mod;
        p[i] = p[i - 1] * 3LL % mod;
    }
    for(int i = 0; i < N; ++i) { inv[i] = quickpow(fac[i], mod - 2) % mod; }
}

inline ll C(ll x, ll y) { return (fac[x] * inv[y] % mod * inv[x - y] % mod) % mod; }

inline void work() {
	ll ans = 0, x = 1LL;
    --n;
    if(m < k)	swap(m, k);
    for(int i = 0; i <= m + k; ++i) {
        ans = (ans + C(n + i, n) * p[m + k - i] % mod * x) % mod;
        if(i < k) x = (x * 2LL) % mod;
        else if(i < m) x = (x * 2LL - C(i, k)) % mod ;
        else  x = (x * 2LL - C(i, k) - C(i, m)) % mod ;
    }
    printf("%lld\n", (ans + mod) % mod);
}

int main() {
	init();
    work();
    return 0;
}
