#include <bits/stdc++.h>
using namespace std;

typedef long long int lli;

const int MOD = 1e9+7;
const int facHausSize = 900005;
lli facHaus[facHausSize];

lli powe(int a, int b) {
	if(b < 2) return b? a:1;
	else {
		lli base = powe(a, b/2);
		lli ans = base*base;
		ans %= MOD;
		if(b%2) {
			ans *= a;
			ans %= MOD;
		}
		return ans;
	}
}

lli inv(int a) {
	return powe(a, MOD-2);
}

lli choos(int a, int b) {
	if(a < b || b < 0) return 0;
	lli ans = facHaus[a];
	ans %= MOD;
	ans *= inv(facHaus[b]);
	ans %= MOD;
	ans *= inv(facHaus[a-b]);
	ans %= MOD;
	return ans;
}

int N, M, K;

int main() {
	facHaus[0]=facHaus[1]=1;
	for(int i = 2; i < facHausSize; i++) {
		facHaus[i]=(i*facHaus[i-1])%MOD;
	}

	cin >> N >> M >> K;

	//ans = summation of [(N-1+m+k)C(m+k)][(m+k)Cm]3^(M+K-m-n) from m = 0 to M and from k = 0 to K
	lli termOne = 1;
	lli termTwo = 1;
	lli termThree = powe(3, M+K);
	lli base = termOne*termTwo*termThree;
	lli ans = base;
	for(int summe = 1; summe <= M+K; summe++) {
		termOne *= (N-1+summe);
		termOne %= MOD;
		termOne *= inv(summe);
		termOne %= MOD;

		termTwo *= 2;
		if(summe > M) {
			termTwo -= choos(summe-1, M);
		}
		if(summe > K) {
			termTwo -= choos(summe-1, K);
		}
		termTwo += 2*MOD;
		termTwo %= MOD;
	
		termThree = powe(3, M+K-summe);

		base = termOne*termTwo;
		base %= MOD;
		base *= termThree;
		base %= MOD;

		ans += base;
		ans %= MOD;
	}

	cout << ans << endl;

	return 0;
}