#include <bits/stdc++.h>
using namespace std;
struct distr {
  double r, s, p;
  bool ok;
  distr() : ok(false) {}
  distr(double _r, double _s, double _p) : ok(true), r(_r), s(_s), p(_p) {}
  distr operator+(const distr &rhs) const {
    return distr(this->r + rhs.r, this->s + rhs.s, this->p + rhs.p);
  }
} ans[101][101][101];
distr operator*(const double x, const distr &rhs) {
  return distr(x * rhs.r, x * rhs.s, x * rhs.p);
}
void dfs(int r, int s, int p) {
  if (ans[r][s][p].ok) return;
  double rs = r * s, sp = s * p, rp = r * p, total = rs + sp + rp;
  rs /= total;
  sp /= total;
  rp /= total;
  distr ret = distr(0.0, 0.0, 0.0);
  if (r) dfs(r - 1, s, p), ret = ret + rp * ans[r - 1][s][p];
  if (s) dfs(r, s - 1, p), ret = ret + rs * ans[r][s - 1][p];
  if (p) dfs(r, s, p - 1), ret = ret + sp * ans[r][s][p - 1];
  ans[r][s][p] = ret;
}
int main() {
  int r, s, p;
  scanf("%d%d%d", &r, &s, &p);
  for (int i = 1; i <= r; i++) ans[i][0][0] = distr(1.0, 0.0, 0.0);
  for (int i = 1; i <= s; i++) ans[0][i][0] = distr(0.0, 1.0, 0.0);
  for (int i = 1; i <= p; i++) ans[0][0][i] = distr(0.0, 0.0, 1.0);
  dfs(r, s, p);
  printf("%.12f %.12f %.12f\n", ans[r][s][p].r, ans[r][s][p].s, ans[r][s][p].p);
  return 0;
}
