#include <bits/stdc++.h>
#define rep(i,n) for(int i = 0; i < n; i++)
using namespace std;
typedef long long ll;
typedef pair<ll,ll> P;

const double EPS = 1e-10;
const ll INF = 100000000;
const ll MOD = 1000000007;

ll n, m, k;
ll kai[1000001];
ll p3[1000001];
ll dp[1000001];

void init (int _n) {
    kai[0] = 1;
    p3[0] = 1;
    for (int i = 1; i <= _n; i++) kai[i] = kai[i-1]*i%MOD;
    for (int i = 1; i <= _n; i++) p3[i] = p3[i-1]*3%MOD;
}

ll mod_pow (ll x, ll y) {
    ll ret = 1;
    while (y) {
        if (y&1) ret = ret*x%MOD;
        x = x*x%MOD;
        y /= 2;
    }
    return ret;
}

ll conb (ll x, ll y) {
    ll z = x-y;
    ll ret = kai[x]*mod_pow(kai[y],MOD-2)%MOD;
    ret = ret*mod_pow(kai[z],MOD-2)%MOD;
    return ret;
}

int main() {
    cin >> n >> m >> k;
    ll s = n+m+k;
    ll ans = 0;
    init(s);
    dp[0] = 1;
    for (ll i = 1; i <= s; i++) {
        if (i <= m && i <= k) {
            dp[i] = dp[i-1]*2%MOD;
        } else if (i <= m) {
            dp[i] = (dp[i-1]*2-conb(i-1,i-1-k)+MOD*MOD)%MOD;
        } else if (i <= k) {
            dp[i] = (dp[i-1]*2-conb(i-1,m)+MOD*MOD)%MOD;
        } else {
            dp[i] = (dp[i-1]*2-conb(i-1,m)-conb(i-1,i-1-k)+2*MOD*MOD)%MOD;
        }
    }
    for (ll i = n; i <= s; i++) {
        ll add = p3[s-i];
        add = add * conb(i-1, n-1) % MOD;
        add = add * dp[i-n] % MOD;
        ans = (ans + add) % MOD;
    }
    cout << ans << endl;
}

