#include <cassert>
#include <cstdio>

const int N = 300000;
const int MOD = (int)1e9 + 7;

int inv[N + N + 1], a, b, c, bn_b[N], bn_c[N];

void update(int& x, int a)
{
    x += a;
    if (x >= MOD) {
        x -= MOD;
    }
}

void prepare(int* bn, int a, int b) // bn[i] = binom{i + b}{b} 0 <= i < a
{
    bn[0] = 1;
    for (int i = 1; i < a; ++ i) {
        bn[i] = 1LL * bn[i - 1] * (i + b) % MOD * inv[i] % MOD;
    }
}

int binom[1000][1000];

int main()
{
// #ifdef LOCAL_JUDGE
//     freopen("F.in", "r", stdin);
// #endif
    inv[1] = 1;
    for (int i = 2; i <= N + N; ++ i) {
        inv[i] = 1LL * (MOD - MOD / i) * inv[MOD % i] % MOD;
    }
    while (scanf("%d%d%d", &a, &b, &c) == 3) {
        a --;
        prepare(bn_b, b, c);
        prepare(bn_c, c, b);
        int three = 1;
        for (int i = 0; i < b + c; ++ i) {
            three = 3LL * three % MOD;
        }
        int bn_a = 1;
        int ds = 1;
        int result = three;
        for (int s = 1; s <= b + c; ++ s) {
            three = 1LL * three * inv[3] % MOD;
            bn_a = 1LL * bn_a * (s + a) % MOD * inv[s] % MOD;
            ds = 2LL * ds % MOD;
            if (s > b) {
                update(ds, MOD - bn_c[s - b - 1]);
            }
            if (s > c) {
                update(ds, MOD - bn_b[s - c - 1]);
            }
            update(result, 1LL * bn_a * ds % MOD * three % MOD);
        }
        printf("%d\n", result);
    }
}
