#include<bits/stdc++.h>
using namespace std;
const int maxn=1000005;
const int mod=1e9+7;
long long fac[maxn];
long long inv[maxn];
long long san[maxn];
long long two[maxn];
void pre()
{
    fac[0]=fac[1]=1;
    inv[1]=1;san[1]=3;san[0]=1;
    two[0]=1;two[1]=2;
    for(int i=2;i<maxn;i++)
    {
        two[i]=two[i-1]*2%mod;
        san[i]=san[i-1]*3%mod;
        fac[i]=fac[i-1]*i%mod;
        inv[i]=(mod-mod/i)*inv[mod%i]%mod;
    }
    inv[0]=1;
    for(int i=2;i<maxn;i++)
        inv[i]=inv[i-1]*inv[i]%mod;
}
int getc(int a,int b)
{
    if(b<0||b>a) return 0;
    //printf("sss %lld %lld %d\n",fac[a],inv[b],b);
    return fac[a]*inv[b]%mod*inv[a-b]%mod;
}

int main()
{
    int n,m,k;
    pre();
    scanf("%d%d%d",&n,&m,&k);
    int tot=n+m+k;
    if(m>k) swap(m,k);
    long long ans=san[tot-n];
    long long tmp=1;
    for(int i=n+1;i<=tot;i++)
    {
        tmp=tmp*2%mod;
        if(i-n>m){
            tmp=tmp-getc(i-n-1,m);
            if(tmp<0) tmp+=mod;
        }
        if(i-n>k){
            tmp=tmp-getc(i-n-1,k);
            if(tmp<0) tmp+=mod;
        }
        ans=ans+san[tot-i]*getc(i-1,n-1)%mod*tmp%mod;
        //printf("%lld %lld %lld\n",ans,tmp,getc(i-1,n-1));
    }
    printf("%lld\n",ans%mod);
    return 0;
}
