#include<bits/stdc++.h>
using namespace std;
#define N 1000000 + 5
#define Mod 1000000007
#define rep(i, l, r) for(int i = l; i <= r; ++i)
int n, m, k, f, g, tmp, ans, p[N], fac[N], inv[N];
int read(){
    char c; int x = 0, f = 1;
    c = getchar();
    while(c > '9' || c < '0'){ if(c == '-') f = -1; c = getchar();}
    while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}
int Inc(int a, int b){
    return (a += b) >= Mod ? a - Mod : a;
}
int Dec(int a, int b){
    return (a -= b) < 0 ? a + Mod : a;
}
int Mul(int a, int b){
    return 1ll * a * b % Mod;
}
int Qpow(int a, int b){
    int ans = 1;
    while(b){
        if(b & 1) ans = Mul(ans, a);
        a = Mul(a, a), b >>= 1;
    }
    return ans;
}
int C(int n, int m){
    if(m > n) return 0;
    return Mul(fac[n], Mul(inv[n - m], inv[m]));
}
int main(){
    n = read(), m = read(), k = read();
    fac[0] = 1, p[0] = inv[0] = 1;
    rep(i, 1, N - 5) fac[i] = Mul(fac[i - 1], i), p[i] = Mul(p[i - 1], 3), inv[i] = Qpow(fac[i], Mod - 2);
    f = 1, ans = Mul(p[m + k], Mul(C(n - 1, 0), f));
    rep(i, 1, m + k){
        f = Dec(Mul(f, 2), C(i - 1, m));
        if(i - k > 0){
            if(i - k == 1) g = 1;
            else g = Inc(Mul(g, 2), C(i - 1, i - k - 1));
            tmp = Dec(f, g);
        } 
        else tmp = f;
        ans = Inc(ans, Mul(p[m + k - i], Mul(C(n + i - 1, i), tmp)));
    }
    printf("%d", ans);
    return 0;
}