#include <bits/stdc++.h>
using namespace std;
struct Timer {
  chrono::time_point<chrono::high_resolution_clock> start, end;
  chrono::duration<float> dur;
  Timer() { start = chrono::high_resolution_clock::now(); }
  ~Timer() {
    end = chrono::high_resolution_clock::now();
    dur = end - start;
    cout << "\nTime Elapsed : " << dur.count() << " s\n";
  }
};
long long int sum() { return 0; }
template <typename T, typename... Args>
T sum(T a, Args... args) {
  return a + sum(args...);
}
template <int D, typename T>
struct Vec : public vector<Vec<D - 1, T>> {
  static_assert(D >= 1, "Vector dimension must be greater than zero!");
  template <typename... Args>
  Vec(int n = 0, Args... args)
      : vector<Vec<D - 1, T>>(n, Vec<D - 1, T>(args...)) {}
};
template <typename T>
struct Vec<1, T> : public vector<T> {
  Vec(int n = 0, T val = T()) : vector<T>(n, val) {}
};
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int testCases = 1;
  while (testCases--) {
    int n, a, b;
    cin >> n >> a >> b;
    if (n == a + 1) {
      if (a == 0)
        cout << "1\n";
      else
        cout << "-1\n";
      return 0;
    }
    vector<int> ans(n, 1);
    int cur = 2, cur_sum = 1;
    bool f = false || (n == 1 || a == 0);
    for (int i = 1; i < n; i++) {
      if (b > 0) {
        ans[i] = cur_sum + 1;
        b--;
        cur = ans[i] + 1;
        f = true;
      } else if (a > 0) {
        if (!f) {
          ans[i] = ans[i - 1];
          i++;
          ans[i] = ans[i - 1] + 1;
          cur = ans[i];
          f = true;
        } else
          ans[i] = cur;
        cur++;
        a--;
      } else
        break;
      cur_sum += ans[i];
    }
    if (a || b || !f)
      cout << "-1\n";
    else {
      for (auto x : ans) cout << x << " ";
      cout << "\n";
    }
  }
}
