
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
const LL MOD = 1000000007ll;

LL m_pow(LL a,LL n)
{
    if(n == 0)return 1;
    LL half = m_pow(a,n/2);
    half *= half;
    half %= MOD;
    return (half * (n % 2 ? a : 1)) % MOD;
}
vector<LL>fact;
LL comb(LL n,LL r)
{
    LL shi = fact[n];
    LL bo1 = m_pow(fact[r],MOD - 2);
    LL bo2 = m_pow(fact[n - r],MOD - 2);
    shi *= bo1;
    shi %= MOD;
    shi *= bo2;
    shi %= MOD;
    return shi;
}

int main()
{
    fact.push_back(1);
    for(int i = 1;i < 5e6;++i)fact.push_back(fact.back() * i % MOD);
    int N,M,K;
    cin >> N >> M >> K;
    LL val = 1;
    LL ans = 0;
    for(int P = N;P <= N + M + K;++P)
    {
        int down = P-N-K;
        int up = M;
        if(P != N)val *= 2;
        val %= MOD;
        if(down > 0)
        {
            val -= comb(P-N-1,down-1);
            val += MOD;
            val %= MOD;
        }
        if(P-N > up)
        {
            val -= comb(P-N-1,up);
            val += MOD;
            val %= MOD;
        }
        LL plus = val;
        plus *= m_pow(3,N+M+K-P);
        plus %= MOD;
        plus *= comb(P-1,N-1);
        plus %= MOD;
        ans += plus;
        ans %= MOD;
        cerr << plus << endl;
    }
    cout << ans << endl;
    return 0;
}