#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
const int N=1000010,Mo=1000000007;
int fac[N],rev[N],d[N];
inline int Pow(int x,int y) {
    int ret=1;
    while(y) {
	if(y&1) ret=1LL*ret*x%Mo;
	x=1LL*x*x%Mo,y>>=1;
    }
    return ret;
}
inline int C(int n,int m) {
    if(n<m) return 0;
    return 1LL*fac[n]*rev[m]%Mo*rev[n-m]%Mo;
}
int main() {
    int n,m,k,s,L=0,R=0,t=1,ans=0;
    cin>>n>>m>>k,s=n+m+k;
    for(int i=fac[0]=1;i<=s;i++) fac[i]=1LL*fac[i-1]*i%Mo;
    rev[s]=Pow(fac[s],Mo-2);
    for(int i=s;i;i--) rev[i-1]=1LL*rev[i]*i%Mo;
    for(int i=d[0]=1;i<=s;i++) d[i]=3LL*d[i-1]%Mo;
    ans=d[m+k];
    for(int i=1;i<=m+k;i++) {
	t=(2LL*t+C(i-1,++R)+C(i-1,L-1))%Mo;
	int l=max(0,i-k),r=min(i,m);
	if(L<l) t=(t-C(i,L++))%Mo;
	if(r<R) t=(t-C(i,R--))%Mo;
	ans=(ans+1LL*C(n+i-1,n-1)*t%Mo*d[m+k-i])%Mo;
    }
    cout<<(ans+Mo)%Mo;
    return 0;
}