import java.util.Scanner; public class Skyscrapers_artur { static final int MAXN = 5010; static final int mod = 1000000007; static final long[][] c = new long[MAXN][MAXN]; static final long[][] s = new long[MAXN][MAXN]; public static void main(String[] args) { Scanner in = new Scanner(System.in); // Combinations: Pascal triangle c[0][0] = 1; for (int i = 1; i < c.length; i++) for (int j = 0; j <= i; j++) c[i][j] = ((j > 0 ? c[i - 1][j - 1] : 0) + c[i - 1][j]) % mod; while (true) { int n = in.nextInt(); int a = in.nextInt(); int b = in.nextInt(); if (n == 0 && a == 0 && b == 0) break; // Unsigned Stirling numbers of the first kind // s[i][j] == # of permutations of length i, with j buildings visible from left (or right) s[0][0] = 1; for (int i = 1; i <= n; i++) for (int j = 1; j <= i; j++) /* * For [i][j] consider the placement of the shortest building: 1. At the leftmost position -- it is always visible, * thus compute for [i-1][j-1] 2. Anywhere else, except the leftmost position -- it is never visible, thus compute for * [i-1][j] */ s[i][j] = (s[i - 1][j - 1] + (i - 1) * s[i - 1][j]) % mod; long result = 0; for (int k = 0; k < n; k++) /* * All valid permutations are counted: 1. Place the tallest building at position k. 2. Choose k buildings that form a * configuration with A visible buildings from the left. 3. Rest of the buildings form B visible buildings from the * right. */ result = (result + c[n - 1][k] * s[k][a - 1] % mod * s[n - k - 1][b - 1]) % mod; System.out.println(result); } } }