#include <iostream>
#include <fstream>
#include <set>
#include <map>
#include <string>
#include <vector>
#include <bitset>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <cassert>
#include <queue>

#define mp make_pair
#define pb push_back


typedef long long ll;
typedef long double ld;

using namespace std;
const int MX = 1000000;
const ll MOD = 1e9 + 7;
ll pw3[MX];
ll fc[MX];
ll bfc[MX];
ll dp[MX];
ll dp1[MX];

ll pw(ll a, ll b) {
	ll ans = 1;
	while (b) {
		while (!(b & 1))
			b >>= 1, a = (a * a) % MOD;
		ans = (ans * a) % MOD, --b;
	}
	return ans;
}

void init() {
	pw3[0] = 1;
	for (int i = 1; i < MX; ++i)
		pw3[i] = (pw3[i - 1] * 3) % MOD;
	fc[0] = 1;
	for (int i = 1; i < MX; ++i)
		fc[i] = (fc[i - 1] * i) % MOD;
	for (int i = 0; i < MX; ++i)
		bfc[i] = pw(fc[i], MOD - 2);
}

ll cnk(ll n, ll k) {
	if (k > n)
		return 0;
	return fc[n] * bfc[k] % MOD * bfc[n - k] % MOD;
}

int n, m, k;

int main() {
	scanf("%d%d%d", &n, &m, &k);
	init();
	dp1[0] = 1;
	for (int i = 1; i <= m + k; ++i)
		dp1[i] = (dp1[i - 1] * 2) % MOD;
	for (int i = 1; i <= m + k; ++i)
		dp[i] = (dp[i - 1] * 2 + cnk(i - 1, m) + cnk(i - 1, k)) % MOD;
	for (int i = 0; i <= m + k; ++i)
		dp1[i] = (dp1[i] - dp[i] + MOD) % MOD;
	ll ans = 0;
	for (int i = 0; i <= m + k; ++i) {
		ans += dp1[i] * pw3[m + k - i] % MOD * cnk(i + n - 1, n - 1) % MOD;
		ans %= MOD;
	}
	cout << ans << "\n";
	return 0;
}


