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

const ll p = 1e9 + 7;
ll n, m, k, ans;
ll fac[N], inv[N], san[N];

ll fpow(ll a, ll b)
{
    ll ans = 1;
    while(b)
    {
        if(b & 1) ans = ans * a % p;
        a = a * a % p; b >>= 1;
    }
    return ans;
}

ll C(ll n, ll m)
{
    if(n < m || n < 0 || m < 0) return 0;
    return fac[n] * inv[m] % p * inv[n - m] % p;
}

int main()
{
    scanf("%lld%lld%lld", &n, &m, &k);
    ll t = n + m + k;
    fac[0] = inv[0] = san[0] = 1;
    for(int i = 1; i <= t; i ++)
    {
        fac[i] = fac[i - 1] * i % p;
        san[i] = san[i - 1] * 3 % p;
    }
    //for(int i = 1; i <= 5; i ++) printf("%lld %lld %lld", fac[i], inv[i], san[i]), system("pause");
    inv[t] = fpow(fac[t], p - 2);
    for(int i = t - 1; i; i --) inv[i] = inv[i + 1] * (i + 1) % p;
    ll t1 = 0, t2 = 1;
    for(int i = 0; i <= m + k; i ++)
    {
        t = C(n + i - 1, n - 1) * san[m + k - i] % p;
        //printf("%lld", t); system("pause");
        t = t * (t2 - t1 + p) % p;
        t2 = (t2 * 2 % p - C(i, m) + p) % p;
        t1 = ((t1 * 2 % p - C(i, i - k - 1) + p) % p + C(i + 1, i - k)) % p;
        ans = (ans + t) % p; 
        //printf("%lld %lld", ans, t); system("pause");
    }
    printf("%lld", ans);
    return 0;
}