#include<iostream>
#include<string>
using namespace std;
#define MAX_N 1000000
#define MOD 1000000007LL
long long modpow[MAX_N], fact[MAX_N], inv[MAX_N], factinv[MAX_N], dp[MAX_N];
int n, m, p;
void init() {
	fact[0] = 1; for (long long i = 1; i < MAX_N; i++) fact[i] = 1LL * fact[i - 1] * i % MOD;
	inv[1] = 1; for (long long i = 2; i < MAX_N; i++) inv[i] = 1LL * inv[MOD % i] * (MOD - MOD / i) % MOD;
	factinv[0] = 1; for (long long i = 1; i < MAX_N; i++) factinv[i] = 1LL * factinv[i - 1] * inv[i] % MOD;
}
long long modmul(long long A, long long B, long long C) { return ((A*B) % MOD *C) % MOD; }
long long ncr(long long n, long long r) { return modmul(fact[n], factinv[r], factinv[n - r]); }
int main() {
	modpow[0] = 1; for (long long i = 1; i < MAX_N; i++) { modpow[i] = modpow[i - 1] * 3; modpow[i] %= MOD; }
	cin >> n >> m >> p; init();
	long long sum = 0, V = 1;
	for (long long i = 0; i <= m + p; i++) {
		dp[m + p - i] = V; V *= 2;
		if (i >= m)V -= ncr(i, i - m);
		if (i >= p)V -= ncr(i, i - p);
		V = (V + MOD*MOD) % MOD;
	}
	for (long long i = 0; i <= m + p; i++) {
		long long NN = (n - 1) + m + p - i, RR = n - 1;
		sum += modmul(ncr(NN, RR), dp[i], modpow[i]); sum %= MOD;
	}
	cout << sum << endl;
	return 0;
}