Conditional relationships can be an easy way to do something like this. If you want to go the JS route instead, try putting this code in your CBC's footer:
<script>
$(document).ready(function(){
// Parameters
var priceAttributes = [5, 6, 7];
var concepts = 4;
var totalLabel = 'Total';
// Add new row
$('.cbc_row_7').after($('.cbc_row_7').clone().addClass('cbc_total'));
$('.cbc_total .label_text').text(totalLabel);
for (var concept = 1; concept <= concepts; concept++) {
var total = 0;
priceAttributes.forEach(function(priceAttribute){
var level = $('.cbc_row_' + priceAttribute + ':not(.cbc_total) > .level_text_cell').eq(concept - 1).text();
total += Number(level.match(/[0-9]+\.?[0-9]*/));
});
$('.cbc_total > .level_text_cell').eq(concept - 1).text(total);
}
// Fix none
$('.cbc .none_option').attr('rowspan', 8);
})
</script>
Line 4 should be updated with your three price attributes; I assumed they were attributes 5, 6, and 7. Line 5 should be updated with the number of non-None concepts per CBC task. Line 6 can be updated to change the label for the total row.
Be sure to tell me if something does not work right. If you have enabled certain CBC features, the code may need to be adjusted.