
import java.io.*;
import java.util.*;

public class CarefulWithPoison {

	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));
	static StringTokenizer st = new StringTokenizer("");

	public static String next() {
		try	{
		while (!st.hasMoreTokens()) {
			String s = br.readLine();
			if (s == null)
				return null;
			st = new StringTokenizer(s);
		}
		return st.nextToken();
		}	catch(Exception e)	{
			return	null;
		}
	}
	public static void main(String[] asda) throws Exception {
		int max = 2000000 + 10;
		fact = new long [max];
		fact[0] = fact[1] = 1;
		for (int k = 2; k < max; k++)	{
			fact[k] = (k * fact[k-1]) % MOD;
		}

		while	(true)	{
			int N = Integer.parseInt( next() );
			if (N == 0) {
				break;
			}
			int a = Integer.parseInt( next() );
			int b = Integer.parseInt( next() );
			long A = ways(N+N, N);
			long B = count(N, a+2, b);
			long C = count(N, a+1, b+1);
			long D = count(N, a, b+2);

			long ans = (A - ((B+C+D)%MOD) + MOD) % MOD;
			out.println(ans);
		}
        //
        out.flush();
        System.exit(0);
    }
    static long [] fact;
    static long MOD = 1000000007;

    static long count(int N, int a, int b)	{
    	return	(ways(a+b, a) * ways(N - a + N - b, N - a)) % MOD;
    }
    static long ways(int N, int K)	{
    	long ans = fact[N] * modInverse( fact[K] );
    	ans %= MOD;
    	ans *= modInverse( fact[N-K] );
    	return	ans % MOD;
    }

    static long modInverse(long x)	{
		return	modPow( x, MOD - 2, MOD );
	}
    static long modPow(long x, long pow, long mod)	{
		long res = 1;
		while	( pow > 0 )	{
			if	( (pow&1) != 0 )	res = (res * x) % mod;
			pow >>= 1;
			x = (x*x) % mod;
		}
		return res;
	}
}
