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

const int maxn = 5010, P = 1000000007;
int n, A, B, ans, pw[maxn], f[maxn][maxn][2], pre[maxn][maxn][2], h[maxn];

int main() {
    scanf("%d %d %d", &n, &A, &B);
    if (A < B) swap(A, B);
    pw[0] = pw[1] = 1;
    for (int i = 2; i <= n; i++) {
        pw[i] = (pw[i - 1] + pw[i - 1]) % P;
    }
    f[0][0][0] = f[0][0][1] = 1, h[0] = 1;
    pre[0][0][0] = pre[0][0][1] = 1;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= i; j++) {
            (f[i][j][0] += pre[i - 1][i - j][1]) %= P;
            if (i >= B) (f[i][j][1] += pre[i - B][i - j][0]) %= P;
        }
        for (int j = max(0, i - B + 1); j < i; j++) {
            (f[i][0][1] += h[j]) %= P;
        }
        for (int j = A; j <= i; j++) {
            int s = 1LL * (f[i][j][0] + f[i][j][1]) * pw[n - i] % P;
            (ans += s) %= P, f[i][j][0] = f[i][j][1] = 0;
        }
        for (int j = 0; j <= i; j++) {
            (h[i] += f[i][j][0]) %= P;
            pre[i][i - j][0] = (pre[i - 1][i - j][0] + f[i][j][0]) % P;
            pre[i][i - j][1] = (pre[i - 1][i - j][1] + f[i][j][1]) % P;
        }
    }
    printf("%d\n", (ans + P) % P);
    return 0;
}