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

string slow(int ca, int cb, int cc) {
    int n = ca + cb + cc;

    string s = "";
    for (int i = 0; i < ca; i++) s += 'a';
    for (int i = 0; i < cb; i++) s += 'b';
    for (int i = 0; i < cc; i++) s += 'c';

    string ans = s;
    do {
        string mn = s;
        for (int i = 0; i < n; i++) {
            string t = s;
            rotate(t.begin(), t.begin() + i, t.end());
            mn = min(mn, t);
        }
        ans = max(ans, mn);
    } while (next_permutation(s.begin(), s.end()));
    return ans;
}

string lexmin(string s) {
    string mn = s;
    for (int i = 0; i < (int)s.length(); i++) {
        string t = s;
        rotate(t.begin(), t.begin() + i, t.end());
        mn = min(mn, t);
    }
    return mn;
}

string solve(vector<string> v) {
    sort(v.begin(), v.end());
    int n = v.size();
    if (v[0] == v[n - 1]) {
        string s = "";
        for (auto t : v) s += t;
        return lexmin(s);
    }
    map<string, int> mp;
    for (auto s : v) mp[s]++;

    vector<pair<string, int> > b;
    for (auto it : mp) {
        b.push_back(it);
    }

    vector<string> nv;
    vector<string> cur(b[0].second, b[0].first);
    for (int i = (int)b.size() - 1; i >= 1; i--) {
        for (int j = 0; j < b[i].second; j++) {
            cur[j % (int)cur.size()] += b[i].first;
        }
        if (b[i].second % cur.size()) {
            int rem = b[i].second % cur.size();
            //while (cur.size() > rem) {
            for (int l = 0; l < rem; l++) {
                nv.push_back(*cur.begin());
                //cur.pop_back();
                cur.erase(cur.begin());
            }
        }
    }
    for (auto s : cur) nv.push_back(s);
    return solve(nv);
}

string fast(int ca, int cb, int cc) {
    bool f = 0;
    if (ca == 0) {
        f = 1;
        ca = cb;
        cb = cc;
        cc = 0;
    }
    if (ca == 0) {
        return string(cb, 'c');
    }
    int n = ca + cb + cc;

    vector<string> a(ca, "a");
    for (int i = 0; i < cc; i++) {
        a[i % ca] += "c";
    }
    for (int i = 0; i < cb; i++) {
        a[(i + cc) % (ca - cc % ca) + cc % ca] += "b";
    }
    sort(a.begin(), a.end());

    string ans = solve(a);
    //do {
    /*while (1) {
        string s = "";
        random_shuffle(a.begin(), a.end());
        for (string ss : a) s += ss;
        string mn = s;
        for (int i = 0; i < n; i++) {
            string t = s;
            rotate(t.begin(), t.begin() + i, t.end());
            mn = min(mn, t);
        }
        ans = max(ans, mn);
        if (clock() / (double)CLOCKS_PER_SEC > 1.9) break;
    }*/

    if (f) {
        for (char &c : ans) {
            if (c == 'a') c = 'b';
            else c = 'c';
        }
    }
    return ans;
}

int main() {
#ifdef HOME
    freopen("in", "r", stdin);
#endif

    /*int n = 10;
    for (int ca = 0; ca <= n; ca++) {
        for (int cb = 0; ca + cb <= n; cb++) {
            //for (int cc = 0; ca + cb + cc <= n; cc++) {
            int cc = n - ca - cb;
            string ans1 = fast(ca, cb, cc);
            string ans2 = slow(ca, cb, cc);
            //string ans2 = ans1;
            cout << ca << " " << cb << " " << cc << "  " << ans1 << "  " << ans2 << endl;
            if (ans1 != ans2) {
                cout << "FAIL" << endl;
                fast(ca, cb, cc);
                return 0;
            }
        }
    }
    cout << "OK" << endl;*/

    int ca, cb, cc;
    while (cin >> ca >> cb >> cc) {
        cout << fast(ca, cb, cc) << endl;
    }

#ifdef HOME
    cerr << clock() / (double)CLOCKS_PER_SEC << endl;
#endif
    return 0;
}

Measured memory_bytes: 256