#include<iostream>
#define MOD 1000000007

using namespace std;

int Fact[1000005],P3[1000005],Inv[1000005],Dp[1000005];

int put(int a, int b)
{
    int rez=1;
    for(int i=0; (1<<i)<=b; i++)
    {
        if((1<<i)&b)
            rez=(1LL*rez*a)%MOD;
        a=(1LL*a*a)%MOD;
    }
    return rez;
}

int comb(int n, int k)
{
    if(k>n)
        return 0;

    int rez=(1LL*Fact[n]*Inv[k])%MOD;
    rez=(1LL*rez*Inv[n-k])%MOD;
    return rez;
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);

    int n,m,k;
    cin>>n>>m>>k;

    Fact[0]=1;
    P3[0]=1;
    for(int i=1; i<=n+m+k+1; i++)
    {
        Fact[i]=(1LL*Fact[i-1]*i)%MOD;
        P3[i]=(3LL*P3[i-1])%MOD;
    }

    Inv[n+m+k+1]=put(Fact[n+m+k+1],MOD-2);
    for(int i=n+m+k; i>=0; i--)
        Inv[i]=(1LL*Inv[i+1]*(i+1))%MOD;

    Dp[0]=1;
    for(int i=1; i<=m+k; i++)  //nr de moduri de a pune B si C a.i. sa nu castige nici b nici c
    {
        Dp[i]=(Dp[i-1]-comb(i-1,m)+MOD)%MOD; //pun pe poz i B
        Dp[i]=(1LL*Dp[i]+Dp[i-1]-comb(i-1,k)+MOD)%MOD; //pun pe poz i C
    }

    int rez=0;
    for(int i=n+1; i<=n+m+k+1; i++)
    {
        int val=comb(i-2,n-1); //prima si ultima val e a
        val=(1LL*val*P3[n+m+k+1-i])%MOD;
        val=(1LL*val*Dp[i-n-1])%MOD;
        rez=(rez+val)%MOD;
    }
    cout<<rez<<"\n";
    return 0;
}
