If you want to hide the add to cart button for free products follow these instructions:
You have to edit the template : themes/classic/templates/catalog/product.tpl and the block that displays the cart button : product_add_to_cart .
Then you can this condition inside the block :
{block name=’product_add_to_cart’}
{if $product.price==0}
{esle}
{include file=’catalog/_partials/product-add-to-cart.tpl’}
{/if}
{/block}
If you want to hide for just virtual products you can add the is_virtual condition:
{block name=’product_add_to_cart’}
{if $product.is_virtual==1 && $product.price==0}
{esle}
{include file=’catalog/_partials/product-add-to-cart.tpl’}
{/if}
{/block}