#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

typedef long long LL;

const int N = 300010, M = 300010, K = 300010;
const LL MOD = 1E9 + 7;

inline void Add(LL &a, LL b) {
    a = (a + b) % MOD;
    return;
}
inline void Dec(LL &a, LL b) {
    a = ((a - b) % MOD + MOD) % MOD;
    return;
}

LL Pow(LL a, LL b) {
    LL c = 1;
    while (b) {
        if (b & 1) c = c * a % MOD;
        a = a * a % MOD;
        b >>= 1;
    }
    return c;
}

int n, m, k, cnt;

LL fac[N + M + K], fac_ie[N + M + K], f[N + M + K], t[N + M + K];

void Pre() {
    fac[0] = 1;
    for (int i = 1; i <= cnt; ++i)
        fac[i] = fac[i - 1] * i % MOD;
    fac_ie[cnt] = Pow(fac[cnt], MOD - 2);
    for (int i = cnt; i; --i)
        fac_ie[i - 1] = fac_ie[i] * i % MOD;
    t[0] = 1;
    for (int i = 1; i <= cnt; ++i)
        t[i] = t[i - 1] * 3 % MOD;
    return;
}

inline LL C(int a, int b) {
    return fac[a] * fac_ie[b] % MOD * fac_ie[a - b] % MOD;
}

int main() {
    scanf("%d%d%d", &n, &m, &k);
    cnt = n + m + k;
    Pre();
    f[0] = 1;
    for (int i = 1; i <= m + k; ++i) {
        f[i] = (f[i - 1] << 1) % MOD;
        if (i >= m + 1) Dec(f[i], C(i - 1, m));
        if (i >= k + 1) Dec(f[i], C(i - 1, k));
    }
    LL res = 0;
    for (int i = n; i <= cnt; ++i)
        Add(res, C(i - 1, n - 1) * f[i - n] % MOD * t[cnt - i]);
    printf("%lld\n", res);
    return 0;
}