#include <cstdio>
#include <algorithm>

const int MAXN = 3e5 + 1, Mod = 1e9 + 7;

namespace Mathscalc {
    inline int Add(int a, int b) { return a + b >= Mod ? a + b - Mod : a + b; }
    inline int Sub(int a, int b) { return a - b < 0 ? a - b + Mod : a - b; }
    inline int Mul(int a, int b) { return 1LL * a * b % Mod; }
} using namespace Mathscalc;

int n, m, k;

int jc[MAXN << 2], inv[MAXN << 2], invj[MAXN << 2], p[MAXN << 2];
void GetNeed() {
    p[0] = 1; for (int i = 1; i <= MAXN * 3; ++i) p[i] = Mul(p[i - 1], 3);
    jc[0] = 1; for (int i = 1; i <= MAXN * 3; ++i) jc[i] = Mul(jc[i - 1], i);
    inv[1] = 1; for (int i = 2; i <= MAXN * 3; ++i) inv[i] = Mul(Sub(Mod, Mod / i), inv[Mod % i]);
    invj[0] = 1; for (int i = 1; i <= MAXN * 3; ++i) invj[i] = Mul(invj[i - 1], inv[i]);
}

inline int C(int n, int m) { return Mul(jc[n], Mul(invj[m], invj[n - m])); }

int main() {
    scanf("%d%d%d", &n, &m, &k);
    GetNeed();
    if (m < k) std :: swap(m, k); --n;
    int ans = 0, x = 1;
    for (int i = 0; i <= m + k; ++i) {
        ans = Add(ans, Mul(C(n + i, n), Mul(p[m + k - i], x)));
        if (i < k) x = Mul(x, 2);
        else if (i < m) x = Sub(Mul(x, 2), C(i, k));
        else x = Sub(Mul(x, 2), Add(C(i, m), C(i, k)));
    }
	printf("%d\n", ans);
    return 0;
}