#include <bits/stdc++.h>
using namespace std;
using lint = long long int;

constexpr lint MOD = 1000000007;
lint N, M, K;

lint power(lint x,lint n, lint mod)
{
    lint ans = 1;
    while (n>0)
    {
        if (n & 1) ans = ans * x % mod;
        x = x * x % mod;
        n >>= 1;
    }
    return ans;
}

vector<lint> factorial;
vector<lint> facInv;
void cPrecal(int n)
{
    factorial = facInv = vector<lint>(n+1, 1);
    for (int i=1; i<=n; i++)
    {
        factorial[i] = factorial[i-1] * i % MOD;
        facInv[i] = power(factorial[i], MOD-2, MOD);
    }
}

lint nCr(int n, int r)
{
    if (n<r || r<0) return 0;
    else return (factorial[n] * facInv[r] % MOD) * facInv[n-r] % MOD;
}

int main()
{
    cin >> N >> M >> K;
    if (K > M) swap(M, K);

    cPrecal(N+M+K);
    lint ans = 0;
    lint bcpattern;
    for (lint k=0; k<=M+K; k++)
    {
        if (k <= K) bcpattern = power(2, k, MOD);
        else if (k <= M) bcpattern = (bcpattern * 2 - nCr(k-1, K) + MOD) % MOD;
        else bcpattern = (bcpattern * 2 - nCr(k-1, K) - nCr(k-1, k-1-M) + 2 * MOD) % MOD;
        lint tmp = ((nCr(N-1+k, k) % MOD) * bcpattern % MOD) * power(3, M+K-k, MOD);
        ans  = (ans + tmp) % MOD;
    }
    cout << ans << endl;
}
